OpenCV 级联分类器训练(2)

(1)解决Adaboost的问题。Adaboost的原理是用弱分类器去构造强分类器,强分类器的错误率呈下降并稳定的趋势。之前之所以只有62%的正确率,是因为,在训练集训练得到的最强的弱分类器在测试集上也表现不佳,也难怪最终的正确率不高了。样本过拟合是机器学习中的一个常见问题。针对今天出现的情况,最简单的方法是随机取样形成train和test样本集。

编程核心实现就是生成随机数。C++中常用rand()函数生成随机数,但严格意义上来讲生成的只是伪随机数(pseudo-random integral number)。生成随机数时需要我们指定一个种子,如果在程序内循环,那么下一次生成随机数时调用上一次的结果作为种子。但如果分两次执行程序,那么由于种子相同,生成的“随机数”也是相同的。在工程应用时,我们一般将系统当前时间(Unix时间)作为种子,这样生成的随机数更接近于实际意义上的随机数。

srand(unsigned(time(0))); num=rand()%100//生成0-100的随机数

(2)vc 6.0和vs2005中控制台程序读取命令行参数的不同。

vc6.0 int main(int argc, char* argv[])//argc表示命令行参数的个数,argv[]表示参数数组。argv[0]是可执行文件的信息。

vs2005 int _tmain(int argc, _TCHAR* argv[])//意义与上类似,但是_tmain 是unicode版本的main,_CHAR 表示宽长度字符,c++中对应的cout,需要使用wout实现:wout<<argv[2];若使用cout则出现乱码。

linux 下 一般为 int main(int argc, char** argv)

(3)基于vs2010和opencv2.0 完成了对行人的Haar特征进行了训练。这个程序可以借鉴的地方很多,例如vector、templete、虚函数的使用等等,温故知新。等待明晚的测试。

 

 

Jerky Lu wechat
欢迎加入微信公众号